package com.meiyou.service.impl;

import org.springframework.stereotype.Service;

import com.meiyou.service.JiguangTuiSongService;
import com.meiyou.utils.Context;

import cn.jiguang.common.ClientConfig;
import cn.jiguang.common.resp.APIConnectionException;
import cn.jiguang.common.resp.APIRequestException;
import cn.jpush.api.JPushClient;
import cn.jpush.api.push.PushResult;
import cn.jpush.api.push.model.Message;
import cn.jpush.api.push.model.Options;
import cn.jpush.api.push.model.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.SMS;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.audience.AudienceTarget;
import cn.jpush.api.push.model.notification.IosNotification;
import cn.jpush.api.push.model.notification.Notification;


@Service
public class JiguangTuiSongServiceImpl implements JiguangTuiSongService{
    
	/**
	 * 推送消息
	 */
	
	public boolean sndMsg(String context) {
		// TODO Auto-generated method stub
		 JPushClient jpushClient = new JPushClient(Context.MASTER_SECRET, Context.APP_KEY, null, ClientConfig.getInstance());
		 PushPayload payload = buildPushObject_all_all_alert(context);
		 
		 try {
			PushResult result = jpushClient.sendPush(payload);
			return true;
		} catch (APIConnectionException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (APIRequestException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 
		return false;
	}
	/**
	 * 进行推送的关键在于构建一个 PushPayload 对象。以下示例一般的构建对象的用法。

           快捷地构建推送对象：所有平台，所有设备，内容为 ALERT 的通知。
	 * @return
	 */
	public static PushPayload buildPushObject_all_all_alert(String context) {
        return PushPayload.alertAll(context);
    }

	/*
	 * 构建推送对象：所有平台，推送目标是别名为 "alias1"，通知内容为 ALERT。
	 */	
	public static PushPayload buildPushObject_all_alias_alert(String ALERT) {
        return PushPayload.newBuilder()
                .setPlatform(Platform.all())
                .setAudience(Audience.alias("alias1"))
                .setNotification(Notification.alert(ALERT))
                .build();
    }
	/**
	 * 构建推送对象：平台是 Android，目标是 tag 为 "tag1" 的设备，内容是 Android 通知 ALERT，并且标题为 TITLE。
	 */
	public static PushPayload buildPushObject_android_tag_alertWithTitle(String ALERT,String TITLE) {
        return PushPayload.newBuilder()
                .setPlatform(Platform.android())
                .setAudience(Audience.tag("tag1"))
                .setNotification(Notification.android(ALERT, TITLE, null))
                .build();
    }

	/*
	 * 构建推送对象：平台是 iOS，推送目标是 "tag1", "tag_all" 的交集，推送内容同时包括通知与消息 - 通知信息是 ALERT，角标数字为
	 * 5，通知声音为 "happy"，并且附加字段 from = "JPush"；消息内容是 MSG_CONTENT。通知是 APNs 推送通道的，消息是
	 * JPush 应用内消息通道的。APNs 的推送环境是“生产”（如果不显式设置的话，Library 会默认指定为开发）
	 */
	public static PushPayload buildPushObject_ios_tagAnd_alertWithExtrasAndMessage(String ALERT) {
        return PushPayload.newBuilder()
                .setPlatform(Platform.ios())
                .setAudience(Audience.tag_and("tag1", "tag_all"))
                .setNotification(Notification.newBuilder()
                        .addPlatformNotification(IosNotification.newBuilder()
                                .setAlert(ALERT)
                                .setBadge(5)
                                .setSound("happy")
                                .addExtra("from", "JPush")
                                .build())
                        .build())
                 .setMessage(Message.content(ALERT))
                 .setOptions(Options.newBuilder()
                         .setApnsProduction(true)
                         .build())
                 .build();
    }

	/*
	 * 构建推送对象：平台是 Andorid 与 iOS，推送目标是 （"tag1" 与 "tag2" 的并集）交（"alias1" 与 "alias2"
	 * 的并集），推送内容是 - 内容为 MSG_CONTENT 的消息，并且附加字段 from = JPush。
	 */
	public static PushPayload buildPushObject_ios_audienceMore_messageWithExtras(String MSG_CONTENT) {
        return PushPayload.newBuilder()
                .setPlatform(Platform.android_ios())
                .setAudience(Audience.newBuilder()
                        .addAudienceTarget(AudienceTarget.tag("tag1", "tag2"))
                        .addAudienceTarget(AudienceTarget.alias("alias1", "alias2"))
                        .build())
                .setMessage(Message.newBuilder()
                        .setMsgContent(MSG_CONTENT)
                        .addExtra("from", "JPush")
                        .build())
                .build();
    }
	
	/*
	 * 构建推送对象：推送内容包含SMS信息
	 */	 
	public static void testSendWithSMS() {
	        JPushClient jpushClient = new JPushClient(Context.MASTER_SECRET, Context.APP_KEY);
	        try {
	            SMS sms = SMS.newBuilder()
	                    .setDelayTime(1000)
	                    .setTempID(2000)
	                    .addPara("Test", 1)
	                    .build();
	            PushResult result = jpushClient.sendAndroidMessageWithAlias("Test SMS", "test sms", sms, "alias1");
	            
	        } catch (APIConnectionException e) {
	           
	        } catch (APIRequestException e) {
	            
	        }
	    }

}
